package wx

type Resource struct {
	OriginalType   string `json:"original_type"`
	Algorithm      string `json:"algorithm"`       // 对开启结果数据进行加密的加密算法
	Ciphertext     string `json:"ciphertext"`      // base64 编码后的开启/停用结果数据密文
	AssociatedData string `json:"associated_data"` // 附加数据
	Nonce          string `json:"nonce"`           // 随机字符串，加密用
}

type NotifyRequest struct {
	Id           string   `json:"id"`            // 通知唯一id
	CreateTime   string   `json:"create_time"`   // 通知创建时间
	ResourceType string   `json:"resource_type"` // 通知类型
	EventType    string   `json:"event_type"`    // 通知资源数据
	Summary      string   `json:"summary"`       // 回调摘要
	Resource     Resource `json:"resource"`      // 回调资源数据
}

type Amount struct {
	PayerTotal    int    `json:"payer_total"`
	Total         int    `json:"total"`
	Currency      string `json:"currency"`
	PayerCurrency string `json:"payer_currency"`
}

type Payer struct {
	Openid string `json:"openid"`
}

type SceneInfo struct {
	DeviceId string `json:"device_id"`
}

type PromotionDetail struct {
	Amount              int    `json:"amount"`
	WechatpayContribute int    `json:"wechatpay_contribute"`
	CouponId            string `json:"coupon_id"`
	Scope               string `json:"scope"`
	MerchantContribute  int    `json:"merchant_contribute"`
	Name                string `json:"name"`
	OtherContribute     int    `json:"other_contribute"`
	Currency            string `json:"currency"`
	StockId             string `json:"stock_id"`
	GoodsDetail         []struct {
		GoodsRemark    string `json:"goods_remark"`
		Quantity       int    `json:"quantity"`
		DiscountAmount int    `json:"discount_amount"`
		GoodsId        string `json:"goods_id"`
		UnitPrice      int    `json:"unit_price"`
	} `json:"goods_detail"`
}

// TradeType 微信支付交易来源类型
type TradeType string

const (
	OfficialAccountPay TradeType = "JSAPI"    // 公众号支付
	ScanPay            TradeType = "NATIVE"   // 扫码支付
	AppPay             TradeType = "App"      // app 支付
	MicroPay           TradeType = "MICROPAY" // 付款码支付
	FacePay            TradeType = "FACEPAY"  // 刷脸支付
	MobileWebPay       TradeType = "MWEB"     // h5 页面支付
)

// TradeState 微信支付交易状态
type TradeState string

const (
	PaySuccess TradeState = "SUCCESS"    // 支付成功
	Refund     TradeState = "REFUND"     // 转入退款
	NotPay     TradeState = "NOTPAY"     // 未支付
	Closed     TradeState = "CLOSED"     // 已关闭
	Revoked    TradeState = "REVOKED"    // 已撤销（付款码支付）
	Paying     TradeState = "USERPAYING" // 用户支付中（付款码支付）
	PayError   TradeState = "PAYERROR"   // 支付失败(其他原因，如银行返回失败)
)

type ResourceContent struct {
	AppID           string            `json:"AppID"`          // 在微信注册的应用的appid
	Mchid           string            `json:"mchid"`          // 商户号
	OutTradeNo      string            `json:"out_trade_no"`   // 我们自己的业务单号
	TransactionId   string            `json:"transaction_id"` // 微信支付系统生成的订单号
	Amount          Amount            `json:"amount"`         // 交易金额
	TradeState      TradeState        `json:"trade_state"`    // 交易状态描述
	BankType        string            `json:"bank_type"`      // 银行标识
	PromotionDetail []PromotionDetail `json:"promotion_detail"`
	SuccessTime     string            `json:"success_time"` // 支付完成时间
	Payer           Payer             `json:"payer"`        // 支付者信息
	TradeStateDesc  string            `json:"trade_state_desc"`
	TradeType       TradeType         `json:"trade_type"` // 交易类型
	Attach          string            `json:"attach"`     // 附加数据
	SceneInfo       SceneInfo         `json:"scene_info"` // 支付场景信息描述
}
